package com.lcj.eduService.service.Impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import com.lcj.eduService.service.OssService;
import com.lcj.eduService.utils.ConstantPropertiesUtils;
import com.lcj.servicebase.config.exceptionHandler.EduException;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @Author：LCJ
 * @Description：
 * @Date：Create in 22:18 2021/2/25 0025
 */
@Service
public class OssServiceImpl implements OssService {
    @Override
    public String updateAvatar(MultipartFile file) {

        //获取阿里云存储相关常量
        String endPoint = ConstantPropertiesUtils.END_POINT;
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
        String uploadUrl = null;
        try {
            //判断oss实例是否存在：如果不存在则创建，如果存在则获取
            OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
            if (!ossClient.doesBucketExist(bucketName)) {
                //创建bucket
                ossClient.createBucket(bucketName);
                //设置oss实例的访问权限：公共读
                ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);            }
               //获取上传文件流
                InputStream inputStream = file.getInputStream();
                //构建日期路径：avatar/2019/02/26/文件名
                String filePath = new DateTime().toString("yyyy/MM/dd");
                //文件名：uuid.扩展名
                String original = file.getOriginalFilename();
                String fileName = UUID.randomUUID().toString();
                String fileType = original.substring(original.lastIndexOf("."));
                String newName = fileName + fileType;
                String fileUrl = filePath + "/" + newName;
                //文件上传至阿里云
                ossClient.putObject(bucketName, fileUrl, inputStream);
                // 关闭OSSClient。
                ossClient.shutdown();
                //获取url地址
                uploadUrl = "http://" + bucketName + "." + endPoint + "/" + fileUrl;
        } catch (IOException e) {
            throw new EduException(2002,"上传图片错误");
        }
        return uploadUrl;

    }
}
